///为通用对象扩展一些方法
///- [T] 实际调用扩展函数实例的类型
extension ObjectExtension<T> on T {
  ///仿Kotlin let函数，对象调用此函数后返回新的类型实例，实现类型转化
  ///- [block] 实现函数，通过此函数将调用类型转成其它类型返回
  ///- [R] 返回block方法返回的类型
  R let<R>(R Function(T it) block) => block(this);

  ///仿Kotlin also函数，对象调用此函数后依旧返回此对象
  ///- 注意，dart本身有语法糖，通过..可以代表访问实例的属性和方法，连续的..可以实现对此对象的属
  ///性设置和方法调用，它在很大程度上可以取待kotlin的apply扩展，在需要调用其它对象的方法传入此
  ///对象作为参数时，才建议使用这个扩展。
  ///- [block] 实现函数，通过此函数将调用类型转成其它类型返回
  T also(void Function(T it) block) {
    block(this);
    return this;
  }
}
